package com.iprojectmanager.businessclass;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import com.iprojectmanager.managers.*;
import com.iprojectmanager.entities.*;

/**
 * @author Alucard
 */
public class UsersControl extends HttpServlet
{
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException 
    {

        if(request.getParameter("operacionesusuarios") != null)
        {
            //if(request.getParameter("operacionesusuarios").compareTo("Crear") == 0)
            //{
                RequestDispatcher disp = request.getRequestDispatcher("VistaOperacionUsuario");
                disp.forward(request, response);
            //}
        }else if(request.getParameter("operacion") != null)
        {
                if(request.getParameter("operacion").compareTo("Eliminar") == 0)
                {
                    deleteUser(request);
                    RequestDispatcher disp = request.getRequestDispatcher("VistaAdministrador");
                    disp.forward(request, response);
                }
                else
                {
                    RequestDispatcher disp = request.getRequestDispatcher("VistaOperacionUsuario");
                    request.setAttribute("tipo",request.getParameter("operacion"));
                    disp.forward(request, response);
                }
        }
        else if(request.getParameter("CA") != null)
        {
            saveUser(request);
            RequestDispatcher disp = request.getRequestDispatcher("VistaAdministrador");
            disp.forward(request, response);
        }
        else if(request.getParameter("MA") != null)
        {
            changeUser(request);
            RequestDispatcher disp = request.getRequestDispatcher("VistaAdministrador");
            disp.forward(request, response);
        }
        else if(request.getParameter("Aceptar").compareTo("Asignar Roles") == 0)
        {
            updateRoles(request);
            HttpSession session = request.getSession();
            Usuario user = (Usuario)session.getAttribute("user");
            if(user instanceof LiderProyecto)
            {
                request.getRequestDispatcher("VistaLider").forward(request,response);
            }else
            {
                request.getRequestDispatcher("VistaAdministrador").forward(request,response);
            }
            //Llamada cuando se van a asignar roles
            //---->UsersControl?tbIdUsuario=54&tbNombreUsuario=i2&rol=103&operacion=Asignar+Roles
        }
    }
    
    public void saveUser(HttpServletRequest request)
    {
        String login = request.getParameter("tbLoginUsuario");
        String password = request.getParameter("tbPasswordUsuario");
        String nombre = request.getParameter("tbNombreUsuario");
        String ap = request.getParameter("tbApUsuario");
        String am = request.getParameter("tbAmUsuario");
        String email = request.getParameter("tbEmailUsuario");
        String tel = request.getParameter("tbTelUsuario");
        String cel = request.getParameter("tbCelUsuario");
        String dir = request.getParameter("taDirUsuario");
        String tipo = request.getParameter("tipo");
        IProjectManager manager = new IProjectManager();
        UserManager usermanager = new UserManager();

            if(login.compareTo("") != 0 && password.compareTo("") != 0 &&  nombre.compareTo("") != 0 && 
               ap.compareTo("") != 0 && am.compareTo("") != 0 && email.compareTo("") != 0 &&
               tel.compareTo("") != 0 && cel.compareTo("") != 0 && dir.compareTo("") != 0)
            {
                if(usermanager.contains(nombre, ap, am) == false)
                {
                    if(tipo.compareTo("Lider de Proyecto") == 0)
                    {
                        LiderProyecto usuario = new LiderProyecto(login,password,nombre,ap,am,email,tel,cel,dir);
                        manager.exec(usuario, IProjectManager.INSERT);
                    }else
                    {
                        IntegranteProyecto usuario = new IntegranteProyecto(login,password,nombre,ap,am,email,tel,cel,dir);
                        manager.exec(usuario, IProjectManager.INSERT);
                    }
                }
            }
    }
    
    public void changeUser(HttpServletRequest request)
    {
        String id = request.getParameter("tbIdUsuario");
        String login = request.getParameter("tbLoginUsuario");
        String password = request.getParameter("tbPasswordUsuario");
        String nombre = request.getParameter("tbNombreUsuario");
        String ap = request.getParameter("tbApUsuario");
        String am = request.getParameter("tbAmUsuario");
        String email = request.getParameter("tbEmailUsuario");
        String tel = request.getParameter("tbTelUsuario");
        String cel = request.getParameter("tbCelUsuario");
        String dir = request.getParameter("taDirUsuario");

            if(login.compareTo("") != 0 && password.compareTo("") != 0 &&  nombre.compareTo("") != 0 && 
               ap.compareTo("") != 0 && am.compareTo("") != 0 && email.compareTo("") != 0 &&
               tel.compareTo("") != 0 && cel.compareTo("") != 0 && dir.compareTo("") != 0)
            {
                UserManager manager = new UserManager();
                Usuario usuario = manager.getUsuario(Integer.valueOf(id));
                    usuario.setNombre(nombre);
                    usuario.setApellidoPaterno(ap);
                    usuario.setApellidoMaterno(am);
                    usuario.setCelular(cel);
                    usuario.setEMail(email);
                    usuario.setTelefono(tel);
                    usuario.setPassword(password);
                    usuario.setLogin(login);
                    usuario.setDireccion(dir);
                    manager.exec(usuario, IProjectManager.UPDATE);
            }
    }
    
    public void updateRoles(HttpServletRequest request)
    {
        String[] roles = request.getParameterValues("rol");
        int id = Integer.valueOf(request.getParameter("tbIdUsuario"));
        UserManager manager = new UserManager();
        RolManager rolmanager = new RolManager();
        IntegranteProyecto user = (IntegranteProyecto)manager.getUsuario(id);
        Rol rol;

                for(Rol r : user.getRoles())
                {
                    r.removeIntregrante(user);
                    rolmanager.exec(r, IProjectManager.UPDATE);
                }
            user.getRoles().clear();
                for(String srol : roles)
                {
                    rol = rolmanager.getRoles(Integer.valueOf(srol));
                    rol.getIntegrantes().add(user);
                    rolmanager.exec(rol, IProjectManager.UPDATE);
                    user.getRoles().add(rol);
                }
            manager.exec(user, IProjectManager.UPDATE);
    }
    
    public void deleteUser(HttpServletRequest request)
    {
        UserManager manager = new UserManager();
        Usuario user = manager.getUsuario(Integer.valueOf(request.getParameter("usuario")));
        
            if(user instanceof IntegranteProyecto)
            {
                ActivitiesManager am = new ActivitiesManager();
                IntegranteProyecto integrante = (IntegranteProyecto)user;
                    for(Actividad actividad : integrante.getActividades())
                    {
                        actividad.setResponsable(null);
                        am.exec(actividad,IProjectManager.UPDATE);
                    }
                        integrante.setProyecto(null);
                        manager.exec(integrante, IProjectManager.UPDATE);
                        user = integrante;
            }
            
            if(user instanceof LiderProyecto)
            {
                LiderProyecto integrante = (LiderProyecto)user;
                        integrante.setProyecto(null);
                        manager.exec(integrante, IProjectManager.UPDATE);
                        user = integrante;
            }
            manager.exec(user,UserManager.DELETE);
    }
        
    @Override
    public String getServletInfo()
    {
        return "Manejo de ABC de usuarios";
    }

}
